﻿
//Базовая ViewModel
function IndexViewModel() {
    var self = this;

    self.Count = function () {

        alert("count");
    }

    self.routingPattern = "{0}\\{1}";
    self.defaultCommand = "page";
    self.isLoading = ko.observable(false);

    self.hasHash = function () {
        return typeof window.location.hash !== undefined && window.location.hash != "";
    };

    self.pushHashCommand = function (command) {
        var url = window.location.href.replace(/#.*/, '');

        window.location.href = url + '#' + command;
    };

    // Обработчик url-команд
    this.hashCommandHadler = function (loc) {
        if (typeof loc !== 'undefined') {
            var url = loc.href.replace(/^.*#/, '');
            var command = url.split('\\');

            if (typeof (command[0]) !== "undefined" && command[0] != "") {
                this[command[0]](command);
            } else {
                this[this.defaultCommand](command);
            }
        }
    };

    //отображение ошибки
    self.showError = function (msg) {
        $.jGrowl("<b><span style='color: #f00;'>" + msg + "</span></b>", { header: "<b><span style='color: #f00;'>Ошибка</span></b>", position: "center" });
    };

    //загрузка данных
    self.loadData = function (arg) {
        ko.dependentObservable(function () {

            self.isLoading(true);

            $.ajax({
                type: 'GET',
                url: '/api/v1.0/' + arg.address,
                data: arg.params,
                success: function (data) {
                    if (arg.onbefore !== undefined)
                        arg.onbefore();

                    if (arg.obj !== undefined) {
                        arg.obj([]);
                        $.each(data, function (index, item) {
                            arg.obj.push(item);
                        });
                    }

                    if (arg.onsuccess !== undefined)
                        arg.onsuccess(data);

                    self.isLoading(false);
                },
                error: function (x, h, r) {
                    if (arg.onerror !== undefined)
                        arg.onerror(x, h, r);
                    else
                        self.showError("Возникла ошибка!");

                    self.isLoading(false);
                }
            });

            if (arg.after !== undefined)
                arg.after();

        }, this);
    };

    //Отправка данных
    self.sendData = function (arg) {

        self.isLoading(true);

        if (arg.onbefore !== undefined)
            arg.onbefore(obj);

        $.ajax({
            type: 'POST',
            url: '/api/v1.0/' + arg.address,
            data: arg.params,
            success: function (data) {

                if (arg.onsuccess !== undefined)
                    arg.onsuccess(data);

                self.isLoading(false);
            },
            error: function () {
                if (arg.onerror !== undefined)
                    arg.onerror(x, h, r);
                else
                    self.showError("Возникла ошибка!");

                self.isLoading(false);
            }
        });
    };

    //Удаление данных
    self.deleteData = function (arg) {
        self.isLoading(true);

        if (arg.onbefore !== undefined)
            arg.onbefore(obj);

        $.ajax({
            type: 'Delete',
            url: '/api/v1.0/' + arg.address,
            data: arg.params,
            success: function () {

                if (arg.onsuccess !== undefined)
                    arg.onsuccess();

                self.isLoading(false);
            },
            error: function () {
                if (arg.onerror !== undefined)
                    arg.onerror(x, h, r);
                else
                    self.showError("Возникла ошибка!");

                self.isLoading(false);
            }
        });
    };

    self.users = ko.observableArray([]);

    //Добавление пользователя в базу данных.
    self.sendUsers = function () {
        self.sendData({
            address: "user/insert",
            params: {
                'Id': self.users()[2].Id
            },
            onsuccess: function (data) {
                alert("Добавление удалось");
            },
            onerror: function (error) {
                alert("Удаление в Базу Данных не удалось!");
            }
        });

    }

    //Функция инициализации
    self.init = function () {
      

        //загрузка пользователей
        self.loadData({
            address: "user/getall",
            obj: self.users,
            onsuccess: function () {
                self.sendUsers();
                /*
                for (var i = 0; i < self.users().length; i++) {
                    alert("User: " + self.users()[i].Name);
                }*/
            }
        });

       
    }


}

//Функция которая выполнится при загрузке страницы содержащей этот скрипт, содержит служебную
//информацию, создающую ViewModel и привязывающую ее к html странице
$(function () {
    var vmIndex = new IndexViewModel();

    vmIndex.init();

    ko.applyBindings(vmIndex);
})